# -*- coding: utf-8 -*-
"""
@time：  2021/05/23  13:34
@Auto：Mr. xingye  993843278
@Company 星野训练营 99384378@qq.com
@Function:excel数据驱动

"""
import os

import pytest

from common.excel.Excel import get_writer,get_reader
from keywords_Web.webkeys import WEB
from common.Logger import logger

from pathlib import Path

class Coof:
    """数据驱动运行类"""
    def __init__(self):
        self.feature = ''
        self.feature_idx = 0
        self.story =''
        self.story_idx = 0
        # 保存所有的数据列表
        self.cases = []
        # 初始化关键字对象
        self.web =WEB()
        #处理结果被覆盖
        self.s_idx = 1
        self.c_idx = 1



    def runCase(self,case_file):
        """获取excel数据，处理成列表，并且运行"""
        reader = get_reader(case_file)
        #writer = get_writer(case_file, res_file)


        #一个sheet页，一个sheet页去读
        sheetname = reader.get_sheets()
        logger.info("全部sheet页信息" +str(sheetname))
        sheetlist =[]
        for sheet in sheetname:
            if not sheet.startswith("#"):
                sheetlist.append(sheet)
        # 打印非#开头的sheet页
        logger.info("需要执行的sheet页信息" + str(sheetlist))

        for sheet in sheetlist:
            reader.set_sheet(sheet)
            #设置大分组名字
            self.feature = sheet
            self.feature_idx +=1
            self.story_idx = 0
            lines = reader.readline()
            logger.info("当前操作的Sheet页为：" + sheet + "，共" + str(len(lines)) + "行数据")

            #统计用例的步骤
            case = []
            # 遍历行
            for i in range(1,len(lines)):
                line = lines[i]
                #如果是模块
                if len(line[0])>1:
                    logger.info(str(i) + "\t" + '模块：' + line[0])
                    # 如果已经统计完了一个用例
                    if case:
                        logger.info("统计完成,准备执行...")
                        self.cases.append(case)
                        #执行
                        self.__run_pytest()
                        case = []

                    #记录模块名字
                    self.story = line[0]
                    self.story_idx +=1
                # 如果是用例
                elif len(line[1]) >1:
                    logger.info(str(i) + "\t" + '用例：' + line[1])
                    if case:
                        self.cases.append(case)
                        self.__run_pytest()
                    #重置case
                    case = []
                    case.append(line)
                # 如果是步骤
                else:
                    #把步骤添加在case里面
                    #logger.info(str(i) + "\t" + '步骤：' + line[4] + "\t" + line[5] + "\t" + line[6] + "\t" + line[7])
                    case.append(line)

            # 当一个sheet读完，保存和运行最后一个用例
            self.cases.append(case)

            if self.cases:
                # 执行
                logger.info("运行最后一个用例...")
                self.__run_pytest()
                logger.info(sheet + ' 页用例全部执行完成..............')

                # 如果没有打开driver，此时不需要关闭浏览器，相反，打开了浏览器需要关闭浏览器，此时关闭浏览器，并重置driver
                if self.web.driver is not None:
                    self.web.driver.quit()
                    self.web.driver = None


            self.s_idx += 1
            # print("此时列表：" + str(os.listdir('./ddt/Web_ddt')))
            # print("shee页下标为:"+ str(self.s_idx))
            # print("用例下标记录为" + str(self.c_idx))

        #最后把运行代码名字还原
        os.rename("./ddt/Web_ddt/test_%s_%s.py" % (self.s_idx-1, self.c_idx - 1), "ddt/Web_ddt/test_web.py")
        #关闭浏览器
        print("修改后列表：" + str(os.listdir('./ddt/Web_ddt')))

    def __run_pytest(self):
        """执行用例"""
        logger.info("准备执行用例...")
        print(self.cases)

        if self.c_idx ==1:
            listdir = os.listdir('./ddt/Web_ddt')
            for i in listdir:
                if i.startswith('test_'):
                    os.rename("./ddt/Web_ddt/"+i,"./ddt/Web_ddt/test_web.py")
                    os.rename("./ddt/Web_ddt/test_web.py","./ddt/Web_ddt/test_%s_%s.py" % (self.s_idx,self.c_idx))
        else:
            try:
                os.rename("./ddt/Web_ddt/test_%s_%s.py" % (self.s_idx, self.c_idx-1),"./ddt/Web_ddt/test_%s_%s.py" % (self.s_idx, self.c_idx))
            except:
                try:
                    os.rename("./ddt/Web_ddt/test_%s_%s.py" % (self.s_idx-1, self.c_idx - 1),
                          "./ddt/Web_ddt/test_%s_%s.py" % (self.s_idx, self.c_idx))
                except:
                    #处理下个多条excel同时执行，找不到模块的问题
                    os.rename("./ddt/Web_ddt/test_web.py","./ddt/Web_ddt/test_%s_%s.py" % (self.s_idx, self.c_idx))

        pytest.main(['-s',"./ddt/Web_ddt/test_%s_%s.py" % (self.s_idx, self.c_idx), '--alluredir', 'temp'])

        self.c_idx += 1
        #清空cases
        self.cases.clear()




#使用全局变量传参
confweb = Coof()
if __name__ == '__main__':
    coof = Coof()
    coof.runCase('../lib/cases/电商登录用例.xls', '../lib/cases/result-电商登录用例.xls')